jetcrab\parser\literals/
new.rs1use crate::ast::{NewExpression, Node};
2use crate::lexer::TokenKind;
3use crate::parser::error::ParseResult;
4use crate::parser::Parser;
5
6impl Parser {
7 pub fn parse_new_expression(&mut self) -> ParseResult<Node> {
8 self.advance();
9
10 let callee = Box::new(self.parse_primary_expression()?);
11
12 let arguments = if self.check(TokenKind::LeftParen) {
13 self.advance();
14 let args = self.parse_arguments()?;
15 self.expect(TokenKind::RightParen)?;
16 args
17 } else {
18 Vec::new()
19 };
20
21 let span = self.create_span_from_tokens();
22 Ok(Node::NewExpression(NewExpression {
23 callee,
24 arguments,
25 span: Some(span),
26 }))
27 }
28}